/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cci;

import cdp.Cliente;
import cdp.Compra;
import cdp.Marca;
import cdp.Produto;
import cgt.AplCompras;
import cgt.AplProdutos;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "ProdutosCtrl", urlPatterns = {"/Produtos"})
public class CtrlProdutos extends Ctrl {

    @Override
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        try {
            List<Produto> produtos = AplProdutos.getInstance().buscarProdutos();
            request.setAttribute("produtos", produtos);
            view = "/produtos_lista.jsp";
        } catch (Exception e) {
        }
        redirecionar(request, response);
        return;
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String evento = request.getParameter("evento");

        if (evento != null) {
            if (evento.equals("adicionar")) {
                if (request.getSession().getAttribute("carrinho") == null) {
                    HashMap<Integer, Compra> carrinho = new HashMap<Integer, Compra>();
                    request.getSession().setAttribute("carrinho", carrinho);
                }
                HashMap<Long, Compra> carrinho = (HashMap<Long, Compra>) request.getSession().getAttribute("carrinho");
                Long produto = Long.parseLong(request.getParameter("produto"));
                Compra compra = carrinho.get(produto);
                if (compra == null) {
                    try {
                        Compra c = new Compra();
                        Produto p = AplProdutos.getInstance().buscarProdutoId(produto);
                        c.setProduto(p);
                        c.setQuantidade(1);
                        c.setValor(p.getPreco());
                        compra = c;
                    } catch (Exception e) {
                        mensagem = "Erro ao adicionar produto";
                    }
                } else {
                    compra.setQuantidade(compra.getQuantidade() + 1);
                    compra.setValor(compra.getValor() + compra.getProduto().getPreco());
                }
                carrinho.remove(produto);
                carrinho.put(produto, compra);
                request.getSession().setAttribute("carrinho", carrinho);
                url = "/Produtos";
            } else if (evento.equals("remover")) {
                HashMap<Long, Compra> carrinho = (HashMap<Long, Compra>) request.getSession().getAttribute("carrinho");
                if (carrinho != null) {
                    Long produto = Long.parseLong(request.getParameter("produto"));
                    Compra compra = carrinho.get(produto);
                    if (compra != null) {
                        compra.setQuantidade(compra.getQuantidade() - 1);
                        compra.setValor(compra.getValor() - compra.getProduto().getPreco());
                        carrinho.remove(produto);
                        if (compra.getQuantidade() > 0) {
                            carrinho.put(produto, compra);
                        }
                        request.getSession().setAttribute("carrinho", carrinho);
                    }
                }
                url = "/Produtos";
            } else if (evento.equals("limpar")) {
                HashMap<Long, Compra> carrinho = (HashMap<Long, Compra>) request.getSession().getAttribute("carrinho");
                if (carrinho != null) {
                    Long produto = Long.parseLong(request.getParameter("produto"));
                    carrinho.remove(produto);
                    request.getSession().setAttribute("carrinho", carrinho);
                }
                url = "/Produtos";
            } else if (evento.equals("comprar")) {
                Cliente cliente = (Cliente) request.getSession().getAttribute("cliente");
                if (cliente != null) {
                    HashMap<Long, Compra> carrinho = (HashMap<Long, Compra>) request.getSession().getAttribute("carrinho");
                    if (carrinho != null && carrinho.size() > 0) {
                        String msgInsuficientes = "";
                        Set<Long> chaves = carrinho.keySet();
                        ArrayList<Long> deletar = new ArrayList<Long>();
                        for (Long chave : chaves) {
                            Compra compra = carrinho.get(chave);
                            compra.setCliente(cliente);
                            compra.setData(new Date());
                            if (cliente.isVip()) {
                                compra.setValor(compra.getValor() * 0.9);
                            }
                            try {
                                int insuficientes = AplCompras.getInstance().efetuarCompra(compra);
                                if (insuficientes > 0) {
                                    msgInsuficientes += compra.getProduto().getNome() + ": " + insuficientes + "<br />";
                                }
                                deletar.add(chave);
                            } catch (Exception e) {
                                if (mensagem == null) {
                                    mensagem = "";
                                }
                                mensagem += compra.getProduto().getNome() + ";";
                            }
                        }
                        for (Long chave : deletar) {
                            carrinho.remove(chave);
                        }
                        if (mensagem != null) {
                            mensagem = "Erro ao comprar os seguintes produtos:" + mensagem;
                        } else {
                            mensagem = "Compra efetuada com sucesso";
                            if (!msgInsuficientes.isEmpty()) {
                                mensagem = "Produtos insifucientes:<br />" + msgInsuficientes + mensagem;
                            }
                        }
                        request.getSession().setAttribute("carrinho", carrinho);
                    } else {
                        mensagem = "Nao ha produtos no carrinho";
                    }
                } else {
                    mensagem = "Precisa estar logado";
                }
                url = "/Produtos";
            }
        }

        if (view != null) {
            redirecionar(request, response);
            return;
        }
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String evento = request.getParameter("evento");

        if (evento != null) {
        }

        if (view != null) {
            redirecionar(request, response);
            return;
        }
        processRequest(request, response);
    }
}
